home *** CD-ROM | disk | FTP | other *** search
/ Aminet 38 / Aminet 38 (2000)(Schatztruhe)[!][Aug 2000].iso / Aminet / comm / mail / mailstat.lha / mailstat.p < prev    next >
Encoding:
Text File  |  2000-03-17  |  4.3 KB  |  184 lines

  1. ; (c) 1999 Cyborg 
  2.  
  3.     {* Include sys:coder/preass/Options.p *}
  4.     {* Include sys:coder/preass/Prozeduren.p *}
  5.  
  6.     {* String: Version="$VER: mailstat 0.1"*}
  7.  
  8.     {* Structure sockaddr_in(),sin_len(BYTE),sin_family(BYTE),sin_port(WORD)
  9.                  sin_addr(LONG),DUMMY1(LONG),DUMMY2(LONG)*}
  10.     
  11.     {* Structure Sockaddr(),SA_Len(BYTE),SA_Family(BYTE)
  12.                  SA_Data[14]*}
  13.  
  14.     {* Structure Hostent,H_name(CHAR),h_aliases(APTR),h_addrtype(LONG)
  15.                  h_length(LONG),H_addr_list(CHAR)*}
  16.  
  17.     {* IncBlock: Puffer,2048*}
  18.  
  19.     {* Const AF_INET=2
  20.              Sock_STREAM=1
  21.              FIONBIO=$8004667e*}
  22.  
  23.     {* incVar: Addr*}
  24.  
  25.  
  26.  
  27. recv[d0,d1,d2,d3]:
  28.     {* Stackframe Socket=d0,Zeiger=d1,Laenge=d2,time=d3,Readlen*}
  29.     While Time>0
  30.      {
  31.       Readlen=TCP_recv(Socket,Zeiger,Laenge,0)
  32.       If Readlen>0 breakwhile
  33.       Time==Time-25
  34.       Delay(25)
  35.      }
  36.     {* UnFrameReturn Readlen*}
  37.    
  38. Removeeol[a0,d7]:
  39.     subq.l #1,d7
  40. .l1:cmpi.b #$0a,(a0)
  41.     bne .l2
  42.     move.b #" ",(a0)+
  43.     dbra d7,.l1
  44.     RTS
  45. .l2:lea 1(a0),a0
  46.     dbra d7,.l1
  47.     RTS
  48.  
  49. TCP_Write[d0,a0,d1,d2]:
  50.     {* StackFrame wr,Socket=d0,msg=a0,MsgLen=d1,flags=d2*}
  51.     While (Wr=TCP_Send(Socket,msg,msglen,flags))#msglen
  52.       {
  53.         Msg==Msg+Wr
  54.         Msglen==MsgLen-Wr
  55.       }
  56.     {* UnFrameReturn *}
  57.  
  58.  
  59.     {* Incblock: Options,50*}
  60.  
  61. TCPFgets[d0]
  62.     {* StackFrame Socket=d0,Res*}
  63.     If (res=Recv(Socket,&puffer,1000,500))>0
  64.      {
  65.       Vprintf(&Puffer,>NullTags:0)
  66.       Res=.w0(&Puffer)
  67.       IF Res=#"+O" 
  68.        {
  69.          {* UnFrameReturn Res*}
  70.        }
  71.      }
  72.     {* UnFrameReturn 0*}
  73.  
  74. GleichHost[a0,a1]:
  75.     move.b (a0)+,d0
  76.     move.b (a1)+,d1
  77.     cmpi.b #$20,d0
  78.     beq .ende
  79.     cmpi.b #".",d0
  80.     beq .Punkt
  81.     cmpi.b #".",d1
  82.     beq .Ende
  83.     bset #5,d0
  84.     bset #5,d1
  85.     cmp.b d0,d1
  86.     beq GleichHost    
  87. .Ende:
  88.     moveq.l #0,d0
  89.     RTS
  90. .punkt:
  91.     cmpi.b #" ",d1
  92.     beq .ok
  93.     cmpi.b #$0a,d1
  94.     beq .ok
  95.     cmpi.b #$00,d1
  96.     beq .ok
  97.     cmp.b d0,d1
  98.     bne .Ende
  99. .ok:moveq.l #1,d0
  100.     RTS
  101.  
  102.  
  103. Start:
  104.     OH=output()
  105. ;    Copymem("rzcomm1\$0a\$00",&options,?)   
  106. ;    Adresse==#Options
  107. ;    laenge=Countstring(&options)
  108.     If GetFilename()=0 
  109.      {
  110.        Write(OH,"Kein Hostname angegeben\n",?)
  111.        {* Return 5*}
  112.      }
  113.     {* IncBlock: Username,50*}
  114.     {* IncBlock: Passwort,50*}
  115.     {* Flush *}
  116.     VPrintf("Hallo\n",&NullTags)
  117.     CopyNextString(NextArg,&username)
  118.     CopyNextString(NextArg,&Passwort)
  119.     If (IH=Open("envarc:tcp/mailstat.cfg",#mode_old))#0
  120.      {
  121.        While Fgets(IH,&Puffer,100)#0
  122.         {
  123.           If GleichHost(&Puffer,&Filename)#0
  124.            {
  125.              CopyNextString(&Puffer,&Filename)
  126.              CopyNextString(NextArg,&Username)
  127.              CopyNextString(NextArg,&Passwort)
  128.              {* Break *}
  129.            }
  130.         }
  131.        Close(IH)
  132.      }
  133.     If (socket=TCP_Socket(AF_INET,SOCK_STREAM,0))#-1
  134.      {
  135.       Vprintf("Socket open...\n",#NullTags)
  136.       If (he=TCP_gethostbyname(&Filename))#0
  137.        {
  138.         Vprintf("Hostname ok...\n",#NullTags)
  139.         #AF_Inet=>sockaddr_in.sin_family
  140.         #110=>sockaddr_in.sin_port
  141.         Zeiger=.lhostent.H_addr_list(he)
  142.         addr==(Zeiger)
  143.         addr==(Addr)
  144.         addr=>sockaddr_in.sin_addr
  145.         ret=TCP_Connect(Socket,&Sockaddr_in,sizeof(sockaddr_in))
  146.         If ret#-1
  147.          {
  148.            Vprintf("Connected...\n",#NullTags)
  149.            If TCP_IoCtlSocket(Socket,FIONBIO,>FIONBIOTag:1,0)=-1
  150.             {
  151.               TCP_Errno()
  152.             }
  153.            Fillbuffer(&Puffer,0,10)
  154.            Vprintf("Begrüßung durch ...\n",#NullTags)
  155.            If TCPFGets(Socket)#0
  156.               {
  157.                Puffer=="USER "+Username+"\n"
  158.                len=Countstring(&Puffer)
  159.                TCP_Write(Socket,&Puffer,Len,0)
  160.                If TCPFGets(Socket)#0
  161.                 {
  162.                  Puffer=="PASS "+Passwort+"\n"
  163.                  len=Countstring(&Puffer)
  164.                  TCP_Write(Socket,&Puffer,Len,0)
  165.                  If TCPFgets(Socket)#0
  166.                   {
  167.                    TCP_Write(Socket,"LIST\n",?,0)
  168.                    If (res=Recv(Socket,&puffer,1000,500))>0
  169.                     {
  170.                       Vprintf(&Puffer,&NullTags)
  171.                     }
  172.                    
  173.                   }
  174.                 }
  175.                TCP_Write(Socket,"QUIT\n",?,0)
  176.               }
  177.          }
  178.        }
  179.       TCP_CloseSocket(Socket)
  180.      }
  181.     {* Return *}
  182.